﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Stationierung.Model;
using System.Windows.Input;
using System.ComponentModel;
using System.Collections.ObjectModel;

namespace Stationierung
{
    public class ViewModel : INotifyPropertyChanged
    {
        public GesamtFläche GesamtFläche { get; set; }
        public ViewModel()
        {
            GesamtFläche = new GesamtFläche();
            AddStationCommand = new AddStationCommandHandle();
            DelStationCommand = new DelStationCommandHandle();
            ResetStationCommand = new ResetStationCommandHandle();
        }
        public ICommand AddStationCommand { get; set; }
        public ICommand DelStationCommand { get; set; }
        public ICommand ResetStationCommand { get; set; }
        public ObservableCollection<Station> Stationen { get { return GesamtFläche.Stationen; } }

        internal void RaisPropertyChanged(string PropName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(PropName));
            }
        }
        public event PropertyChangedEventHandler PropertyChanged;

        double _newStationNummer = 0;
        public double NewStationNummer
        {
            get
            {
                return _newStationNummer;
            }
            set
            {
                _newStationNummer = value;
                RaisPropertyChanged("NewStationNummer");
                CommandManager.InvalidateRequerySuggested();
            }
        }
        double _newStationBreite = 1;
        public double NewStationBreite
        {
            get
            {
                return _newStationBreite;
            }
            set
            {
                _newStationBreite = value;
                RaisPropertyChanged("NewStationBreite");
                //CommandManager.InvalidateRequerySuggested();
            }
        }

        internal void AddNewStation()
        {
            GesamtFläche.AddStation(NewStationNummer, NewStationBreite);
            NewStationNummer++;
            RaisPropertyChanged("NewStationNummer");
            RaisPropertyChanged("Flächeninhalt");
            RaisPropertyChanged("GesamtFläche");
            RaisPropertyChanged("Stationen");
        }

        internal bool CanAddNewStation()
        {
            return GesamtFläche.CanAddStation(NewStationNummer, NewStationBreite);
        }

        internal void DelStation(Station station)
        {
            if (station != null)
            {
                GesamtFläche.DelStation(station.StationsNummer);
                RaisPropertyChanged("Flächeninhalt");
                RaisPropertyChanged("GesamtFläche");
                RaisPropertyChanged("Stationen");
            }
        }

        internal void ResetStations()
        {
            NewStationBreite = 1;
            NewStationNummer = 0;
            GesamtFläche.ResetStations();
            RaisPropertyChanged("Flächeninhalt");
            RaisPropertyChanged("GesamtFläche");
            RaisPropertyChanged("Stationen");
        }
    }
}
